{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 梯度的推导和反向传播的实现  \n",
    "我们将实现Sigmoid层，全连接层Affine和Softmax with Loss层。  \n",
    "  \n",
    "### 1. Sigmoid层  \n",
    "sigmoid函数由$y=\\frac{1}{1+e^{-x}}$表示，sigmoid函数的导数由下式表示。  \n",
    "$$ \\frac{\\partial y}{\\partial x}=y(1-y)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "推导过程如下：  \n",
    "$\\quad\\quad y=\\frac{1}{1+e^{-x}}=(1+e^{-x})^{-1}$  \n",
    "则有：  \n",
    "$\\quad\\quad y'=(-1)(1+e^{-x})^{-2}e^{-x}(-1)=\\frac{e^{-x}}{(1+e^{-x})^2}=\\frac{1}{1+e^{-x}}\\frac{e^{-x}}{1+e^{-x}}$  \n",
    "故得：\n",
    "$ \\frac{\\partial y}{\\partial x}=y(1-y)$"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据上式，Sigmoid层的计算图可以简画如下。这里，将输出侧的层传来的梯度($\\frac{\\partial L}{\\partial y}$)乘以sigmoid函数的导数($\\frac{\\partial L}{\\partial x}$)，然后将这个值传递给输入侧的层。  \n",
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Python实现的Sigmoid层如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np \n",
    "\n",
    "class Sigmoid:\n",
    "    def __init__(self):\n",
    "        self.params,self.grads = [],[]\n",
    "        self.out = None\n",
    "\n",
    "    def forward(self,x):\n",
    "        out = 1/(1+np.exp(-x))\n",
    "        self.out = out \n",
    "        return out \n",
    "\n",
    "    def backward(self,dout):\n",
    "        dx = dout*(1.0-self.out)*self.out \n",
    "        return dx "
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Affine层  \n",
    "通过$y=np.dot(x,W) + b$实现了Affine层的正向传播。在偏置的加法中，使用了Numpy的广播功能。如果明示这一点，则Affine层的计算图如下：  \n",
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如上图所示，通过MatMul节点进行矩阵乘积的计算。偏置被Repeat节点复制，然后进行加法运算。Affine层实现如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Affine:\n",
    "    def __init__(self,W,b):\n",
    "        self.params = [W,b]\n",
    "        self.grads =[np.zeros_like(W),np.zeros_like(b)]\n",
    "        self.x = None \n",
    "    \n",
    "    def forward(self,x):\n",
    "        W,b = self.params\n",
    "        self.x = x \n",
    "        out = np.dot(x,W) + b \n",
    "        return out \n",
    "\n",
    "    def backward(self,dout):\n",
    "        W,b = self.params\n",
    "        dx = np.dot(dout,W.T)\n",
    "        dW = np.dot(self.x.T,dout)\n",
    "        db = np.sum(dout,axis=0)\n",
    "\n",
    "        self.grads[0][...] = dW\n",
    "        self.grads[1][...] = db \n",
    "        return dx "
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据前面规定的代码规范，Affine层将参数保存在实例变量params中，将梯度保存在实例变量grads中。它的反向传播可以通过执行MatMul节点和Repeat节点的反向传播来实现。Repeat节点的反向传播可以通过`np.sum()`计算出来，此时注意矩阵的形状，就可以清楚地知道应该对哪个轴（axis)求和。最后，将权重参数的梯度设置给实例变量grads。  \n",
    "  \n",
    "### 3. Softmax with Loss层  \n",
    "这里可以将Softmax函数和交叉熵误差一起实现为Softmax with Loss层。如下所示：  \n",
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如上的计算图，将Softmax函数记为Softmax层，将交叉熵误差记为Cross Entropy Error层。这里假设执行3类别分类任务，从前一层接收3个输入。  \n",
    "  \n",
    "如图所示，Softmax层对输入$a_1,a_2,a_3$进行正规化，输出$y_1,y_2,y_3$。Cross Entropy Error层接收Softmax的输出$y_1,y_2,y_3$和监督标签$t_1,t_2,t_3$，并基于这些数据输出损失L。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "da",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
